$NG.AllReady(function (page, { useValuesChange, useClick, useUpdateRow, useBeforeClick, useUpdateRows, useDataIndexChange }) {
    //mstform
    var dgrid1_toolbar = $NG.getCmpApi("toolbar_p_form_impl_labor_chg");
    var dgrid2_toolbar = $NG.getCmpApi("toolbar_p_form_impl_daliy_chg");
    var dgrid3_toolbar = $NG.getCmpApi("toolbar_p_form_impl_sec_dev_chg");

    function hiddenInput(table, tabled) {
        //来源主键 || 主键
        $NG.updateUI((updater) => {
            console.log(`过滤参数检查`, updater);
            updater.fieldSetForm[table].u_source_phid.setProps({
                hidden: true,
            });
            tabled.forEach((item) => {
                updater.editGrid[item].u_phid.setProps({
                    hidden: true,
                });
                updater.editGrid[item].u_source_phid.setProps({
                    hidden: true,
                });
            });
        });
    }
    hiddenInput("p_form_impl_cost_budget_chg", ["p_form_impl_labor_chg", "p_form_impl_daliy_chg", "p_form_impl_sec_dev_chg"]);
    var mstform = $NG.getCmpApi("p_form_impl_cost_budget_chg");
    var dgrid1 = $NG.getCmpApi("p_form_impl_labor_chg"); //实施人工p_form_impl_labor_chg
    var dgrid2 = $NG.getCmpApi("p_form_impl_daliy_chg"); //日常费用p_form_impl_daliy_chg
    var dgrid3 = $NG.getCmpApi("p_form_impl_sec_dev_chg"); //二次开发费用p_form_impl_sec_dev_chg
    const toolbars = [
        // { toolbar: $NG.getCmpApi("toolbar"), items: ["copy", "attachment", "check", "history", "applycheck"] },
        // { toolbar: $NG.getCmpApi("toolbar_top"), items: ["imp", "imp_push", "check", "history", "applycheck"] },
        { toolbar: dgrid1_toolbar, items: ["attachment"] },
        { toolbar: dgrid2_toolbar, items: ["attachment"] },
        { toolbar: dgrid3_toolbar, items: ["attachment"] },
    ];
    let lockTime = 0;
    let saveLock = true;
    useBeforeClick(({ args }) => {
        const isLock = (data) => {
            return data.reduce((value, item) => {
                if (item.checked && item.u_source_phid) {
                    value = false;
                }
                return value;
            }, true);
        };
        console.log(`删除行参数`, args);
        let lock = true;
        switch (args[0].containerId) {
            case "p_form_impl_labor_chg":
                const arr1 = dgrid1.getData();
                lock = isLock(arr1);
                break;
            case "p_form_impl_daliy_chg":
                const arr2 = dgrid2.getData();
                lock = isLock(arr2);
                break;
            case "p_form_impl_sec_dev_chg":
                const arr3 = dgrid3.getData();
                lock = isLock(arr3);
                break;
        }
        if (!lock) {
            $NG.alert("不能删除已存在关联记录的数据，只能删除当前表单新增数据！");
        }
        return lock;
    }, "deleterow");
    if (page.oType == "add" || page.oType == "edit") {
        console.log("表检查", mstform);
        lockTime = setInterval(() => {
            var mstform = $NG.getCmpApi("p_form_impl_cost_budget_chg");
            if (mstform.getItem("u_source_phid").getValue()) {
                $NG.execServer("getIsImpSSInfo", { source: mstform.getItem("u_source_phid").getValue() }, (res) => {
                    console.log(`引用结果`, res);
                    if (res.count == 0) return;
                    const _data = JSON.parse(res.data)[0].extendObjects;
                    if (_data.app_status == "1") {
                        return;
                    }
                    saveLock = false;
                    $NG.alert("当前项目的设备清单未审核，不允许变更！！！");
                });
                clearInterval(lockTime);
            }
        }, 1000);
    }
    // 设置默认值人民币和汇率
    if (page.oType == "add") {
        $NG.updateState((updater) => {
            updater.data.p_form_impl_cost_budget_chg.setProps({
                phid_fcur: {
                    label: "人民币",
                    value: 1,
                },
                exchangerate: 1,
            });
        });
    }
    //生成phid
    function generate15DigitNumber(arr) {
        arr.forEach((item) => {
            let str = "";
            // 获取当前时间戳
            let timestamp = Date.now().toString();
            // 如果时间戳不足 15 位，计算需要补充的位数
            let remainingLength = 15 - timestamp.length;
            if (remainingLength > 0) {
                // 生成指定长度的随机数
                let randomPart = "";
                for (let i = 0; i < remainingLength; i++) {
                    randomPart += Math.floor(Math.random() * 10);
                }
                // 将时间戳和随机数拼接成 15 位数字
                str = String(timestamp + randomPart);
            } else {
                // 如果时间戳长度超过 15 位，截取前 15 位
                str = String(timestamp.slice(0, 15));
            }
            console.log(str);
            if (!item.u_phid) {
                item.u_phid = str;
                dgrid1.refreshView();
                dgrid2.refreshView();
                dgrid3.refreshView();
            }
        });
    }

    useBeforeClick(({ args }) => {
        if (!saveLock) {
            $NG.alert("当前项目的设备清单未审核，不允许变更！！！");
            return false;
        }
        return true;
    }, "save");
    useBeforeClick(({ args }) => {
        if (!saveLock) {
            $NG.alert("当前项目的设备清单未审核，不允许变更！！！");
            return false;
        }
        return true;
    }, "check");
    toolbars.forEach(({ toolbar, items }) => {
        if (toolbar) {
            items
                .map((item) => toolbar.getItem(item)) // 提前获取所有按钮
                .filter(Boolean) // 过滤掉不存在的按钮
                .forEach((toolbarItem) => toolbarItem.setHidden()); // 隐藏按钮
        }
    });
    //实施人工
    useUpdateRows(({ args }) => {
        caculatedgrid();
        generate15DigitNumber(args[0]);
        if (window._catch_amt) {
            clearTimeout(window._catch_amt)
        }
        window._catch_amt = setTimeout(() => {
            reduceNum();
        }, 200)
    }, "p_form_impl_labor_chg");
    //实施日常
    useUpdateRows(({ args }) => {
        caculatedgrid();
        generate15DigitNumber(args[0]);
        if (window._catch_amt) {
            clearTimeout(window._catch_amt)
        }
        window._catch_amt = setTimeout(() => {
            reduceNum();
        }, 200)
    }, "p_form_impl_daliy_chg");
    //实施二开
    useUpdateRows(({ args }) => {
        caculatedgrid();
        generate15DigitNumber(args[0]);
        if (window._catch_amt) {
            clearTimeout(window._catch_amt)
        }
        window._catch_amt = setTimeout(() => {
            reduceNum();
        }, 200)
    }, "p_form_impl_sec_dev_chg");
    dgrid1_toolbar.insert({
        id: "dgrid1ShowUI",
        text: "显示原预算数据",
        iconCls: "icon-New",
    });
    dgrid1_toolbar.insert({
        id: "dgrid1hideUI",
        text: "隐藏原预算数据",
        iconCls: "icon-New",
    });
    dgrid2_toolbar.insert({
        id: "dgrid2ShowUI",
        text: "显示原预算数据",
        iconCls: "icon-New",
    });
    dgrid2_toolbar.insert({
        id: "dgrid2hideUI",
        text: "隐藏原预算数据",
        iconCls: "icon-New",
    });

    useClick(() => {
        dgrid1ShowUI();
    }, "dgrid1ShowUI");
    useClick(() => {
        dgrid1hideUI();
    }, "dgrid1hideUI");

    useClick(() => {
        dgrid2ShowUI();
    }, "dgrid2ShowUI");
    useClick(() => {
        dgrid2hideUI();
    }, "dgrid2hideUI");

    ////////////////////////////////////////////////////////////--mstform

    if (mstform) {
        getPtInfoByPhid();
        cntMFilter();
        getCntCount("p_form_impl_cost_budget_chg", "u_cnt", function () {
            getCntMInfoByPhid();
        });
        if (page.oType == "add") {
            dgridAdd();
            mstform.getItem("bill_name").setValue(mstform.getItem("phid_pc").getText() || "" + "实施费用预算变更单");
            useValuesChange(({ args }) => {
                mstform.getItem("bill_name").setValue(mstform.getItem("phid_pc").getText() || "" + "实施费用预算变更单");
            }, "p_form_impl_cost_budget_chg.phid_pc");
        }
    } else {
        console.error("mstform is not available");
    }

    useValuesChange(({ args }) => {
        cntMFilter();
        getPtInfoByPhid();
        $NG.updateState((updater) => {
            updater.data.p_form_impl_cost_budget_chg.setProps({
                u_pc_no: args[0].phid_pc.PhId,
                u_cnt: { label: "", value: "" },
                u_cnt_no: "",
            });
        });
        //单一合同自动带出
        getCntCount("p_form_impl_cost_budget_chg", "u_cnt", function () {
            getCntMInfoByPhid();
            dgridAdd();
        });
        getTotalAmt();
        getSbqdHeadInfoByPhidPc();
    }, "p_form_impl_cost_budget_chg.phid_pc");
    useValuesChange(({ args }) => {
        getCntMInfoByPhid();
        dgridAdd();
    }, "p_form_impl_cost_budget_chg.u_cnt");

    ////////////////////////////////////////////////////////////--dgrid1
    if (dgrid1) {
        $NG.updateUI((updater) => {
            const fields = ["u_source_phid"];
            fields.forEach((field) => {
                updater.editGrid.p_form_impl_labor_chg[field].setProps({
                    hidden: true, //隐藏
                });
            });
        });

        //差额计算
        function reduceNum() {
            setTimeout(() => {
                const sstotal = mstform.getItem("u_total_impl_amt").getValue() - mstform.getItem("u_total_impl_amt_ori").getValue();
                const ssrgtotal = mstform.getItem("u_total_impl_labor_amt").getValue() - mstform.getItem("u_total_impl_labor_amt_ori").getValue();
                const rctotal = mstform.getItem("u_total_daily_amt").getValue() - mstform.getItem("u_total_daily_amt_ori").getValue();
                const wbtotal = mstform.getItem("u_total_sec_dev_amt").getValue() - mstform.getItem("u_total_sec_dev_amt_ori").getValue();
                const qdmlrate = mstform.getItem("u_gross_profit_rate").getValue() - mstform.getItem("u_gross_profit_rate_ori").getValue();
                $NG.updateState((updater) => {
                    updater.data.p_form_impl_cost_budget_chg.setProps({
                        u_total_impl_amt_gap: sstotal,
                        u_total_impl_labor_amt_gap: ssrgtotal,
                        u_total_daily_amt_gap: rctotal,
                        u_total_sec_dev_amt_gap: wbtotal,
                        u_impl_amt_gap_sum: (Number(window._catch_total_amt.total_amt) || 0) + sstotal,
                        u_impl_labor_amt_gap_sum: (Number(window._catch_total_amt.impl_total_amt) || 0) + ssrgtotal,
                        u_daily_amt_gap_sum: (Number(window._catch_total_amt.svc_total_amt) || 0) + rctotal,
                        u_sec_dev_amt_gap_sum: (Number(window._catch_total_amt.wb_total_amt) || 0) + wbtotal,
                        u_gross_profit_rate_chg: qdmlrate,
                        // u_gross_profit_rate_chg_sum: (Number(window._catch_total_amt.total_rate) || 0) + qdmlrate
                    });
                });
            }, 300);
        }

        function dgrid1ShowUI(params) {
            //表体多字段设置属性
            $NG.updateUI((updater) => {
                for (let j = 1; j <= 12; j++) {
                    // const _str = `u_man_days_${j < 10 ? "0" + j : j}`;
                    const _str_ori = `u_man_days_${j < 10 ? "0" + j : j}_ori`;
                    updater.editGrid.p_form_impl_labor_chg[_str_ori].setProps({
                        hidden: false, //隐藏
                    });
                }
                const fields = ["u_qty_ori", "u_labor_amt_ori"];
                fields.forEach((field) => {
                    updater.editGrid.p_form_impl_labor_chg[field].setProps({
                        hidden: false, //隐藏
                    });
                });
            });
        }
        function dgrid1hideUI(params) {
            //表体多字段设置属性
            $NG.updateUI((updater) => {
                for (let j = 1; j <= 12; j++) {
                    // const _str = `u_man_days_${j < 10 ? "0" + j : j}`;
                    const _str_ori = `u_man_days_${j < 10 ? "0" + j : j}_ori`;
                    updater.editGrid.p_form_impl_labor_chg[_str_ori].setProps({
                        hidden: true, //隐藏
                    });
                }
                const fields = ["u_qty_ori", "u_labor_amt_ori"];
                fields.forEach((field) => {
                    updater.editGrid.p_form_impl_labor_chg[field].setProps({
                        hidden: true, //隐藏
                    });
                });
            });
        }
    }
    payProjectFilter();
    function payProjectFilter() {
        $NG.updateUI((updater) =>
            updater.editGrid.p_form_impl_daliy_chg.u_expense_code.setProps((p) => {
                return {
                    ...p,
                    editor: {
                        ...p.editor,
                        clientSqlFilter: `u_sequence = '02' and phid != '8570000000000328'`,
                    },
                };
            })
        );
    }
    useDataIndexChange(({ args, instance }) => {
        var items = args[0];
        if (items.u_position) {
            $NG.execServer("getSimpleDataByPhid", { phid: items.u_position }, function (res) {
                if (res) {
                    const datas = JSON.parse(res.data)[0].extendObjects;
                    // 尝试将 c_descript 转换为数字
                    const personnelRate = Number(datas.c_descript);
                    if (isNaN(personnelRate)) {
                        // 如果转换失败，可以设置一个默认值或者处理错误
                        console.error("Invalid value for u_personnel_rate:", datas.c_descript);
                    }
                    items.u_personnel_rate = personnelRate;
                    caculatedgrid();
                }
                dgrid1.refreshView();
            });
        }
        instance.updateRow(items);
    }, "p_form_impl_labor_chg.u_position");
    ////////////////////////////////////////////////////////////--dgrid2
    if (dgrid2) {
        $NG.updateUI((updater) => {
            const fields = ["u_source_phid"];
            fields.forEach((field) => {
                updater.editGrid.p_form_impl_daliy_chg[field].setProps({
                    hidden: true, //隐藏
                });
            });
        });

        ////////////////////////////////////////////////////////////--dgrid2 function--////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////--dgrid2 function--////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////--dgrid2 function--////////////////////////////////////////////////////////////
        function dgrid2ShowUI(params) {
            $NG.updateUI((updater) => {
                for (let j = 1; j <= 12; j++) {
                    const _str_ori = `u_expenses_${j < 10 ? "0" + j : j}_ori`;
                    updater.editGrid.p_form_impl_daliy_chg[_str_ori].setProps({
                        hidden: false, //隐藏
                    });
                }
                const fields = ["u_annual_impl_amt_ori"];
                fields.forEach((field) => {
                    updater.editGrid.p_form_impl_daliy_chg[field].setProps({
                        hidden: false, //隐藏
                    });
                });
            });
        }
        function dgrid2hideUI(params) {
            $NG.updateUI((updater) => {
                for (let j = 1; j <= 12; j++) {
                    const _str_ori = `u_expenses_${j < 10 ? "0" + j : j}_ori`;
                    updater.editGrid.p_form_impl_daliy_chg[_str_ori].setProps({
                        hidden: true, //隐藏
                    });
                }
                const fields = ["u_annual_impl_amt_ori"];
                fields.forEach((field) => {
                    updater.editGrid.p_form_impl_daliy_chg[field].setProps({
                        hidden: true, //隐藏
                    });
                });
            });
        }
    } else {
        console.log("dgrid2 获取失败");
    }
    ////////////////////////////////////////////////////////////--dgrid3
    if (dgrid3) {
        registerCalcGroup({
            dataKey: "p_form_impl_sec_dev_chg",
            qtyField: "",
            taxRate: "u_tax_rate",
            prcField: "",
            prcVatField: "",
            amtField: "u_sec_dev_amt",
            amtVatField: "u_sec_dev_amt_vat",
        });

        $NG.updateUI((updater) => {
            const fields = ["u_source_phid"];
            fields.forEach((field) => {
                updater.editGrid.p_form_impl_sec_dev_chg[field].setProps({
                    hidden: true, //隐藏
                });
            });
        });
    } else {
        console.log("dgrid3 获取失败");
    }
    //--mstform function
    function getPtInfoByPhid() {
        if (mstform.getItem("phid_pc").getValue()) {
            $NG.execServer("getPtInfoByPhid", { phid: mstform.getItem("phid_pc").getValue() }, function (res) {
                const datas = JSON.parse(res.data)[0].extendObjects;
                //帮助字段赋值
                $NG.updateState((updater) => {
                    updater.data.p_form_impl_cost_budget_chg.setProps({
                        u_pc_no: datas.pc_no, //项目编号
                        u_agreed_sts_dt: datas.start_date, //计划完工日期
                        u_agreed_pcl_dt: datas.end_date, //计划竣工日期
                        u_sqgw: {
                            //售前顾问
                            value: datas.user_sqgw_phid,
                            label: datas.user_sqgw_name,
                        },
                        //事业部
                        u_division: {
                            value: datas.division_phid,
                            label: datas.division_name,
                        },
                        //大区
                        u_region: {
                            value: datas.phid_org_phid,
                            label: datas.phid_org_name,
                        },
                        u_regional_center: {
                            //区域中心
                            value: datas.regional_center_phid,
                            label: datas.regional_center_name,
                        },
                        u_ywx: {
                            //产品线
                            value: datas.midwife_phid,
                            label: datas.midwife_name,
                        },
                        u_ywlx: {
                            //项目类型
                            value: datas.user_ywlx,
                            label: datas.ywlx_name,
                        },
                        u_dept: {
                            //部门
                            value: datas.dept_phid,
                            label: datas.dept_name,
                        },
                        phid_org: {
                            //部门
                            value: datas.org_phid,
                            label: datas.org_name,
                        },
                        u_pc_type: {
                            //项目类型
                            value: datas.type_phid,
                            label: datas.type_name,
                        },
                    });
                });
            });
        }
    }

    function cntMFilter() {
        $NG.updateUI((updater, state) => {
            updater.fieldSetForm.p_form_impl_cost_budget_chg.u_cnt.setProps({
                onBeforeOpen: async () => {
                    var phid_pc = mstform.getItem("phid_pc").getValue();
                    if (!phid_pc) {
                        $NG.alert("请先选择项目");
                        return false;
                    } else {
                        return true;
                    }
                },
                ...(!!mstform.getItem("phid_pc").getValue() && {
                    clientSqlFilter: {
                        bill_type: 1,
                        phid_pc: mstform.getItem("phid_pc").getValue(),
                    },
                }),
            });
        });
    }

    function getCntMInfoByPhid(params) {
        $NG.execServer("getCntMInfoByPhid", { phid: mstform.getItem("u_cnt").getValue() }, function (res) {
            const datas = JSON.parse(res.data)[0].extendObjects;
            //帮助字段赋值
            $NG.updateState((updater) => {
                //【注意这里的表名不能为控件ID，必须要是表名】
                updater.data.p_form_impl_cost_budget_chg.setProps({
                    u_cnt_no: datas.pcm_no, //合同编码
                    u_cnt_amt_vat: datas.cnt_sum_vat_fc, //合同价税合计
                    u_cnt_amt: datas.cnt_sum_fc,
                    u_invoice_type: {
                        //发票类型
                        value: datas.invoice_type_phid,
                        label: datas.invoice_type_name,
                    },
                });
            });
        });
    }
    ////////////////////////////////////////////////////////////--mstform function

    function dgridAdd(params) {
        dgrid1.clearRows();
        dgrid2.clearRows();
        dgrid3.clearRows();
        setTimeout(async () => {
            // 赋值
            function _sum(num) {
                $NG.updateState((updater) => {
                    updater.data.p_form_impl_cost_budget_chg.setProps({
                        u_total_impl_amt_ori: num,
                    });
                });
            }
            // 临时存储上一次的费用
            const _countMaps = {
                _d1: 0,
                _d2: 0,
                _d3: 0,
                set d1(value) {
                    this._d1 = value;
                    _sum(this._d1 + this._d2 + this._d3);
                },
                set d2(value) {
                    this._d2 = value;
                    _sum(this._d1 + this._d2 + this._d3);
                },
                set d3(value) {
                    this._d3 = value;
                    _sum(this._d1 + this._d2 + this._d3);
                },
            };
            Object.defineProperties(_countMaps, {
                _d1: {
                    configurable: false,
                    writable: true,
                    enumerable: false,
                    value: 0,
                },
                _d2: {
                    configurable: false,
                    writable: true,
                    enumerable: false,
                    value: 0,
                },
                _d3: {
                    configurable: false,
                    writable: true,
                    enumerable: false,
                    value: 0,
                },
            });
            if (dgrid1) {
                await $NG.execServer("getImplLaborBudgetInfo", { phid_pc: mstform.getItem("phid_pc").getValue() }, function (res) {
                    let _data = null;
                    if (typeof res.data === "string") {
                        _data = JSON.parse(res.data);
                    } else {
                        _data = res.data;
                    }
                    console.log(`测试`, _data);
                    //默认增行,批量新增表体数据
                    var gridArr = []; //定义表体数组
                    var gridCount = res.count; //增加的行数,可根据从数据库从取出的数据总数增行
                    for (var i = 0; i < gridCount; i++) {
                        var gridObj = {};
                        //对表体字段进行赋值,可以取数据库中的值进行赋值
                        const mphid = _data[i].extendObjects.mphid;
                        if (!mstform.getItem("u_source_phid").getValue()) {
                            $NG.updateState((updater) => {
                                updater.data.p_form_impl_cost_budget_chg.setProps({
                                    u_source_phid: mphid,
                                });
                            });
                        }
                        // 年度
                        gridObj.u_source_phid = _data[i].extendObjects.phid;
                        gridObj.u_year = _data[i].extendObjects.u_year;
                        gridObj.u_man_months_ori = _data[i].extendObjects.u_man_months;
                        gridObj.u_qty = _data[i].extendObjects.u_qty;
                        gridObj.u_qty_ori = _data[i].extendObjects.u_qty;
                        gridObj.u_labor_amt_ori = _data[i].extendObjects.u_labor_amt;
                        gridObj.u_labor_amt = _data[i].extendObjects.u_labor_amt;
                        // 人员岗位
                        gridObj.u_position_EXName = _data[i].extendObjects.position_name;
                        gridObj.u_position = _data[i].extendObjects.position_phid;
                        // 人员费率
                        gridObj.u_personnel_rate = _data[i].extendObjects.u_personnel_rate;
                        // 人工费合计
                        gridObj.u_labor_amt = _data[i].extendObjects.u_labor_amt;
                        // 数量
                        gridObj.u_qty = _data[i].extendObjects.u_qty;
                        // 1- 12 月
                        for (let j = 1; j <= 12; j++) {
                            const _str = `u_man_days_${j < 10 ? "0" + j : j}`;
                            const _str_ori = `u_man_days_${j < 10 ? "0" + j : j}_ori`;
                            gridObj[_str] = _data[i].extendObjects[_str];
                            gridObj[_str_ori] = _data[i].extendObjects[_str];
                        }
                        gridArr.push(gridObj);
                    }
                    //调用新增表体行数据的函数
                    let _count_ori = 0;
                    let _count = 0;
                    gridArr.forEach((item) => {
                        _count_ori += item.u_labor_amt_ori;
                        _count += item.u_labor_amt;
                    });
                    $NG.updateState((updater) => {
                        _countMaps.d1 = _count;
                        updater.data.p_form_impl_cost_budget_chg.setProps({
                            u_total_impl_labor_amt_ori: _count_ori,
                            u_total_impl_labor_amt: _count,
                        });
                    });
                    dgrid1.addRows(gridArr);
                });
            }
            if (dgrid2) {
                await $NG.execServer("getImplDaliyBudgetInfo", { phid_pc: mstform.getItem("phid_pc").getValue() }, function (res) {
                    let _data = null;
                    if (typeof res.data === "string") {
                        _data = JSON.parse(res.data);
                    } else {
                        _data = res.data;
                    }
                    //默认增行,批量新增表体数据
                    var gridArr = []; //定义表体数组
                    var gridCount = res.count; //增加的行数,可根据从数据库从取出的数据总数增行
                    for (var i = 0; i < gridCount; i++) {
                        //对表体字段进行赋值,可以取数据库中的值进行赋值
                        var gridObj = {};
                        gridObj.u_source_phid = _data[i].extendObjects.phid;
                        gridObj.u_year = _data[i].extendObjects.u_year;
                        gridObj.u_annual_impl_amt_ori = _data[i].extendObjects.u_annual_impl_amt;
                        gridObj.u_annual_impl_amt = _data[i].extendObjects.u_annual_impl_amt;
                        gridObj.u_expense_code = _data[i].extendObjects.u_expense_code;
                        gridObj.u_expense_code_EXName = _data[i].extendObjects.u_expense_name;
                        gridObj.u_expense_desc = _data[i].extendObjects.u_expense_description;
                        // 1- 12 月
                        for (let j = 1; j <= 12; j++) {
                            const _str = `u_expenses_${j < 10 ? "0" + j : j}`;
                            const _str_ori = `u_expenses_${j < 10 ? "0" + j : j}_ori`;
                            gridObj[_str] = _data[i].extendObjects[_str];
                            gridObj[_str_ori] = _data[i].extendObjects[_str];
                        }
                        gridArr.push(gridObj);
                    }
                    let _count_ori = 0;
                    let _count = 0;
                    gridArr.forEach((item) => {
                        _count_ori += item.u_annual_impl_amt_ori;
                        _count += item.u_annual_impl_amt;
                    });
                    $NG.updateState((updater) => {
                        _countMaps.d2 = _count;
                        updater.data.p_form_impl_cost_budget_chg.setProps({
                            u_total_daily_amt_ori: _count_ori,
                            u_total_daily_amt: _count,
                        });
                    });
                    //调用新增表体行数据的函数
                    dgrid2.addRows(gridArr);
                });
            }
            if (dgrid3) {
                await $NG.execServer(
                    "getImplSecDevBudgetInfo",
                    {
                        phid_pc: mstform.getItem("phid_pc").getValue(),
                    },
                    function (res) {
                        let _data = null;
                        if (typeof res.data === "string") {
                            _data = JSON.parse(res.data);
                        } else {
                            _data = res.data;
                        }
                        //默认增行,批量新增表体数据
                        var gridArr = []; //定义表体数组
                        var gridCount = res.count; //增加的行数,可根据从数据库从取出的数据总数增行
                        for (var i = 0; i < gridCount; i++) {
                            //对表体字段进行赋值,可以取数据库中的值进行赋值
                            var gridObj = {};
                            gridObj.u_source_phid = _data[i].extendObjects.phid;
                            gridObj.u_sec_dev_sys = _data[i].extendObjects.u_sec_dev_sys;
                            gridObj.u_sec_dev_amt_vat = _data[i].extendObjects.u_sec_dev_amt_vat; //现外包人工（含税）
                            gridObj.u_sec_dev_amt = _data[i].extendObjects.u_sec_dev_amt; //现外包人工（未税）
                            gridObj.u_tax_rate_ori = _data[i].extendObjects.u_tax_rate; //原税率
                            gridObj.u_tax_rate = _data[i].extendObjects.u_tax_rate; //现税率
                            gridObj.u_sec_dev_amt_ori_vat = _data[i].extendObjects.u_sec_dev_amt_vat; //原外包人工（含税）
                            gridObj.u_sec_dev_amt_ori = _data[i].extendObjects.u_sec_dev_amt; //原外包人工（未税）
                            gridArr.push(gridObj);
                        }
                        let _count_ori = 0;
                        let _count = 0;
                        gridArr.forEach((item) => {
                            _count_ori += item.u_sec_dev_amt_ori;
                            _count += item.u_sec_dev_amt;
                        });
                        $NG.updateState((updater) => {
                            _countMaps.d3 = _count;
                            updater.data.p_form_impl_cost_budget_chg.setProps({
                                u_total_sec_dev_amt_ori: _count_ori,
                                u_total_sec_dev_amt: _count,
                            });
                        });
                        //调用新增表体行数据的函数
                        dgrid3.addRows(gridArr);
                    }
                );
            }
        }, 200);
    }

    // 返回当月最大天数
    function getDaysInMonth(year, month) {
        const y = parseInt(year, 10);
        const m = parseInt(month, 10);
        return new Date(y, m, 0).getDate();
    }

    function caculatedgrid() {
        let u_total_impl_labor_amt = 0; //实施人工费
        let u_total_daily_amt = 0; //合计日常费用
        let u_total_sec_dev_amt = 0; //合计二次开发费用
        let u_total_impl_amt = 0; //合计总费用

        dgrid1.getRows().forEach((items, rowIndex) => {
            let total = 0;
            for (let i = 1; i <= 12; i++) {
                const str = "u_man_days_" + String(i).padStart(2, "0");
                const manDays = Number(items[str]);
                let maxDay = getDaysInMonth(items.u_year, i);
                if (isNaN(manDays)) {
                    items[str] = 0;
                } else if (manDays > maxDay) {
                    items[str] = 0;
                    $NG.alert(`第${rowIndex + 1}行第 ${i}月人天不能超过${maxDay}天`);
                }
                total += Number(items[str] > 21.75 ? 21.75 : items[str]) || 0;
            }
            // 人月=人天/21.75
            // 人工费合计=人员费率*数量*人月
            items.u_man_months = total / 21.75;
            items.u_labor_amt = ((Number(items.u_personnel_rate) || 0) * (Number(items.u_qty) || 0) * (Number(items.u_man_months) || 0)).toFixed(2);
            u_total_impl_labor_amt += parseFloat(items.u_labor_amt) || 0;
        });
        dgrid2.getRows().forEach((items) => {
            let total = 0;
            for (let i = 1; i <= 12; i++) {
                const str = "u_expenses_" + String(i).padStart(2, "0");
                total += Number(items[str]) || 0;
            }
            items.u_annual_impl_amt = total;
            u_total_daily_amt += parseFloat(items.u_annual_impl_amt) || 0;
        });
        dgrid3.getRows().forEach((items) => {
            u_total_sec_dev_amt += parseFloat(items.u_sec_dev_amt) || 0;
        });
        dgrid1.refreshView();
        dgrid2.refreshView();
        dgrid3.refreshView();

        u_total_impl_amt = u_total_impl_labor_amt + u_total_daily_amt + u_total_sec_dev_amt;
        let u_gross_profit_rate =
            (Number(window._catch_sbqd_amt.cnt_amt) || 0) &&
            ((Number(window._catch_sbqd_amt.cnt_amt) || 0) - ((Number(window._catch_sbqd_amt.project_amt) || 0) + (Number(u_total_impl_amt) || 0))) / (Number(window._catch_sbqd_amt.cnt_amt) || 0);
        $NG.updateState((updater) => {
            updater.data.p_form_impl_cost_budget_chg.setProps({
                u_total_impl_labor_amt: u_total_impl_labor_amt, //
                u_total_daily_amt: u_total_daily_amt, //
                u_total_sec_dev_amt: u_total_sec_dev_amt, //
                u_total_impl_amt: u_total_impl_amt, //
                u_gross_profit_rate: u_gross_profit_rate,
            });
        });
    }

    //////////////////////////////////////插入按钮////////////////////////////////////////////////////////
    //////////////////////////////////////插入按钮////////////////////////////////////////////////////////
    //////////////////////////////////////插入按钮////////////////////////////////////////////////////////
    //////////////////////////////////////插入按钮////////////////////////////////////////////////////////
    //////////////////////////////////////插入按钮////////////////////////////////////////////////////////

    if (page.oType == "add" || page.oType == "edit") {
        {
            //添加按钮
            $NG.getCmpApi("toolbar_p_form_impl_daliy_chg").insert({
                id: "fyadd",
                text: "选择费用项目",
                iconCls: "icon-New",
            });
        }
    }
    useClick(async function ({ args }) {
        // 打开帮助选择器并应用过滤条件
        $NG.external
            .openNGHelp({
                type: "NGMultipleHelp",
                helpId: "cost_pc_ss",
                valueField: "d.phid.",
                labelField: "d.u_name",
                clientSqlFilter: `u_sequence = '02' and phid != '8570000000000328'`, // 应用过滤条件
            })
            .then((data) => {
                console.log(data);

                var gridArr = []; // 初始化 gridArr 数组
                for (var i = 0; i < data.length; i++) {
                    // 列出需要赋值的表体字段
                    var gridObj = {
                        u_expense_code: "",
                    };
                    // 对表体字段进行赋值, 可以取数据库中的值进行赋值
                    gridObj.u_expense_code = data[i].origin.phid;
                    gridObj.u_expense_code_EXName = data[i].origin.u_name;
                    // 关键步骤：将 gridObj 添加到 gridArr 数组中
                    gridArr.push(gridObj);
                }
                console.log(gridArr); // 确保这里打印出来的 gridArr 不是空的
                dgrid2.addRows(gridArr); // 将数据添加到表格组件中
            });
    }, "fyadd");

    // 获取累计实施费用累计值
    getTotalAmt();
    function getTotalAmt() {
        window._catch_total_amt = {};
        const phid_pc = mstform.getItem("phid_pc").getValue();
        if (!phid_pc) return;
        $NG.execServer("getTotalSsAmt", { phid_pc }, (res) => {
            if (res.count == 0) return;
            const _data = JSON.parse(res.data)[0].extendObjects;
            window._catch_total_amt = _data;
        });
    }

    // 获取设备清单相关费用值
    getSbqdHeadInfoByPhidPc();
    function getSbqdHeadInfoByPhidPc() {
        const phid_pc = mstform.getItem("phid_pc").getValue();
        if (!phid_pc) return;
        window._catch_sbqd_amt = {};
        $NG.execServer("getSbqdHeadInfoByPhidPc", { phid_pc }, (res) => {
            if (res.count == 0) return;
            const _data = JSON.parse(res.data)[0].extendObjects;
            const map = {
                cnt_amt: _data.u_cnt_amt,
                project_amt: (Number(_data.u_total_cost_amt) || 0) - (Number(_data.u_implement_amt) || 0) - (Number(_data.u_svc_cost_amt) || 0),
                total_rate: _data.u_signed_gm_rate,
                outher: _data,
            };
            window._catch_sbqd_amt = { ...map };
            if (page.oType != "view") {
                $NG.updateState((updater) => {
                    updater.data.p_form_impl_cost_budget_chg.setProps({
                        u_gross_profit_rate_ori: _data.u_signed_gm_rate,
                    });
                });
            }
        });
    }

    // 注册明细计算列
    function registerCalcGroup({ dataKey, qtyField, taxRate, prcField, prcVatField, amtField, amtVatField }) {
        console.log("registerCalcGroup", dataKey, qtyField, taxRate, prcField, prcVatField, amtField, amtVatField);
        let isCalculating = false;

        // 税率变动
        useDataIndexChange(({ args, instance }) => {
            if (isCalculating) return;
            isCalculating = true;

            args[0][amtField] = (args[0][amtVatField] || 0) / (1 + (args[0][taxRate] || 0));

            instance.updateRow(args[0]);
            isCalculating = false;
        }, `${dataKey}.${taxRate}`);

        // 未税金额变动
        useDataIndexChange(({ args, instance }) => {
            if (isCalculating) return;
            isCalculating = true;

            args[0][amtVatField] = (args[0][amtField] || 0) * (1 + (args[0][taxRate] || 0));

            instance.updateRow(args[0]);
            isCalculating = false;
        }, `${dataKey}.${amtField}`);

        // 含税金额变化
        useDataIndexChange(({ args, instance }) => {
            if (isCalculating) return;
            isCalculating = true;

            args[0][amtField] = (args[0][amtVatField] || 0) / (1 + (args[0][taxRate] || 0));

            instance.updateRow(args[0]);
            isCalculating = false;
        }, `${dataKey}.${amtVatField}`);
    }
});

//获取合同数量
function getCntCount(table, key, fun) {
    if (!$NG.getCmpApi(table).getItem("phid_pc").getValue()) return;
    $NG.execServer("getCntCount", { type: 1, phid_pc: $NG.getCmpApi(table).getItem("phid_pc").getValue() }, (res) => {
        console.log(res, "count");
        switch (res.count) {
            case 0:
                return;
            case 1:
                const datas = JSON.parse(res.data)[0].extendObjects;
                const temp_map = {};
                temp_map[key] = datas.phid;
                temp_map[`${key}_EXName`] = datas.bill_name;
                $NG.updateState((updater) => {
                    updater.data[table].setProps({
                        ...temp_map,
                    });
                    setTimeout(() => {
                        if (fun) {
                            fun();
                        }
                    }, 200);
                });
        }
    });
}
